// scheduler.h 
//      Data structures for the thread dispatcher and scheduler.
//      Primarily, the list of threads that are ready to run.
//
// Copyright (c) 1992-1993 The Regents of the University of California.
// All rights reserved.  See copyright.h for copyright notice and limitation 
// of liability and disclaimer of warranty provisions.

#ifndef SCHEDULER_H
#define SCHEDULER_H

#include "copyright.h"
#include "list.h"
#include "thread.h"

// The following class defines the scheduler/dispatcher abstraction -- 
// the data structures and operations needed to keep track of which 
// thread is running, and which threads are ready but not running.

class Scheduler
{
  public:
    Scheduler ();		// Initialize list of ready threads 
    ~Scheduler ();		// De-allocate ready list

    void ReadyToRun (Thread * thread);	// Thread can be dispatched.
    Thread *FindNextToRun ();	// Dequeue first thread on the ready 
    // list, if any, and return thread.
    void Run (Thread * nextThread);	// Cause nextThread to start running
    void Print ();		// Print contents of ready list

  private:
      List * readyList;		// queue of threads that are ready to run,
    // but not running
};

#endif // SCHEDULER_H
